package pe.com.hermes.hermetic.web.controller.configuracion;

import pe.com.hermes.hermetic.beans.AuditBean;
import pe.com.hermes.hermetic.beans.PuntoBean;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.web.controller.base.IController;

import pe.com.hermes.hermetic.web.forms.HMF1001Form;

import pe.com.hermes.hermetic.web.forms.HMF1005Form;

import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;

import pe.com.hermes.hermetic.negocio.ultil.Util;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/mostrarHWF1005.html")
public class EquivalenciaClientesController implements IController{
    protected final static Logger logger = Logger.getLogger(EquivalenciaClientesController.class);
    @Autowired
    private HermeticFacade servicioHermetic;
    @RequestMapping(method=RequestMethod.GET)    
    protected String showForm(ModelMap model,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"metodo: GET");
        String cliente = (String)request.getSession(false).getAttribute("cliente");
        String sucursal = (String)request.getSession(false).getAttribute("sucursal");
        HMF1005Form form = new HMF1005Form();
        form.setCliente(cliente);
        form.setSucursal(sucursal);
        model.put(FORM_KEY,form);
        AuditBean auditBean = new AuditBean(EQUIV_CLIE);
        servicioHermetic.inseAudit(auditBean);
        return FORM_EQUIV_CLIE;
    }
    @RequestMapping(params="accion=buscar")
    protected String buscarClienteBanco(ModelMap model,@ModelAttribute(FORM_KEY) HMF1005Form form,BindingResult result,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"buscarClienteBanco");
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
        List listaDestinos = servicioHermetic.getEquiClienteDestino(form.getCliente(),Util.limpiarSQLInjectionBusqueda(form.getDesDestino()));        
        model.put("listaDestinos",listaDestinos);
        model.put(FORM_KEY,form);
        return FORM_EQUIV_CLIE_BUSC;
    }
    @RequestMapping(params="accion=seleccionar")
    protected String seleccionarCliente(ModelMap model,@ModelAttribute(FORM_KEY) HMF1005Form form,BindingResult result,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"seleccionarCliente");
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
        if (request.getParameter("chk") != null) {
            String codigoClienteBanco = request.getParameter("chk");
            int ray = codigoClienteBanco.indexOf("-");
            String codClienteBanco = codigoClienteBanco.substring(0, ray);
            String desClienteBanco = 
                codigoClienteBanco.substring(ray + 1);
            form.setDesDestino(desClienteBanco);
            form.setCodDestino(codClienteBanco);
        }
        List listadoDestino = servicioHermetic.getEquiClientes(form.getCliente(),form.getCodDestino());
        model.put("listadoDestino",listadoDestino);
        model.put(FORM_KEY,form);
        return FORM_EQUIV_CLIE;
    }
    @RequestMapping(params="accion=cancela")
    protected String cancelar(ModelMap model,@ModelAttribute(FORM_KEY) HMF1005Form form,BindingResult result,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"cancelar");
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);                
        model.put(FORM_KEY,form);
        return FORM_EQUIV_CLIE;
    }
    @RequestMapping(params="accion=mostrar")
    protected String mostrarEquivalenciaClientes(ModelMap model,@ModelAttribute(FORM_KEY) HMF1005Form form,BindingResult result,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"mostrarEquivalenciaClientes");
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);                
        form.setHabilitarEstado("ok");
        if(("").equals(form.getDesDestino()))
            form.setCodDestino("");
        List listadoDestino = servicioHermetic.getEquiClientes(form.getCliente(),form.getCodDestino(),form.getDesDestino());
        model.put("listadoDestino",listadoDestino);
        model.put(FORM_KEY,form);
        return FORM_EQUIV_CLIE;
    }
    @RequestMapping(params="accion=nueva")
    protected String nuevaEquivalenciaCliente(ModelMap model,@ModelAttribute(FORM_KEY) HMF1005Form form,BindingResult result,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"nuevaEquivalenciaCliente");
        String view;
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
        form.setCodEqui("");
        form.setDesEqui("");
        form.setEstado(ConstantesHermetic.CTE_ESTADO_ACTIVO);
        form.setHabilitarEstado("no");
        List listEstado = servicioHermetic.getEstado();
        List listadoDestinos = servicioHermetic.getEquiClienteDestino(form.getCliente(),Util.limpiarSQLInjectionBusqueda(form.getDesDestino()));
        view=FORM_EQUIV_CLIE_MODI;
        if (listadoDestinos.size() == 0) {            
            form.setCodDestino("");
            form.setCodDestinoSelecc("");
            form.setDesDestino("");
            form.setDesDestinoSelecc("");
            result.addError((new FieldError(FORM_KEY,"",1,false , new String[] {"accion.agencia.repetida.equivalencia"}, new String[] {}, "")));
            view=FORM_EQUIV_CLIE;
        }
        model.put("listEstado", listEstado);
        model.put(FORM_KEY,form);
        return view;
    }
    @RequestMapping(params="accion=guarda")
    protected String guardarEquivalenciaCliente(ModelMap model,@ModelAttribute(FORM_KEY) HMF1005Form form,BindingResult result,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"guardarEquivalenciaCliente");
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);                
        String usuario = (String)request.getSession().getAttribute("usuario");
        PuntoBean punto = new PuntoBean();
        punto.setCodCliente(form.getCliente().trim());
        punto.setCodPunto(form.getCodDestino().trim());
        punto.setDesPunto(form.getDesDestino());
        punto.setCodEquiAgen(form.getCodEqui().trim());
        punto.setDesEquiAgen(form.getDesEqui());
        punto.setEstado(form.getEstado());
        punto.setUsuaWeb(usuario);
        punto.setUsuaModi(usuario);
        servicioHermetic.actualizarEquiCliente(punto);
        form.setHabilitarEstado("ok");
        List listadoDestino = servicioHermetic.getEquiClientes(form.getCliente(),form.getCodDestino());
        model.put("listadoDestino",listadoDestino);
        model.put(FORM_KEY,form);
        return FORM_EQUIV_CLIE;
    }
    @RequestMapping(params="accion=modifica")
    protected String modificarEquivalenciaClientes(ModelMap model,@ModelAttribute(FORM_KEY) HMF1005Form form,BindingResult result,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"modificarEquivalenciaClientes");
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
        int mas = form.getChk().lastIndexOf("+");
        form.setCodDestino(form.getCodDestinoSelecc());
        form.setDesDestino(form.getDesDestinoSelecc());
        form.setHabilitarEstado("ok");
        List listEstado = servicioHermetic.getEstado();
        if(form.getChk().substring(mas+1).equalsIgnoreCase(ConstantesHermetic.CTE_ESTADO_ACTIVO_TITLE))
            form.setEstado(ConstantesHermetic.CTE_ESTADO_ACTIVO);
        if(form.getChk().substring(mas+1).equalsIgnoreCase(ConstantesHermetic.CTE_ESTADO_INACTIVO_TITLE))
            form.setEstado(ConstantesHermetic.CTE_ESTADO_INACTIVO);        
        request.setAttribute("listEstado", listEstado);
        cargaChk(form);
        model.put(FORM_KEY,form);
        return FORM_EQUIV_CLIE_MODI;
    }
    private void cargaChk(HMF1005Form crearform) {
        int a= crearform.getChk().indexOf("-");
        int b= crearform.getChk().indexOf("*");
        int c= crearform.getChk().indexOf("!");
        int d= crearform.getChk().indexOf("+");
        crearform.setCodDestinoSelecc(crearform.getChk().substring(0,a));
        crearform.setDesDestinoSelecc(crearform.getChk().substring(a+1,b));
        crearform.setCodDestino(crearform.getChk().substring(0,a));
        crearform.setDesDestino(crearform.getChk().substring(a+1,b));
        crearform.setCodEqui(crearform.getChk().substring(b+1,c));
        crearform.setDesEqui(crearform.getChk().substring(c+1,d));
    }
}
